﻿#include <stdint.h>

#ifdef __cplusplus
    extern "C" {
#endif

#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

/***********************************************
*@function:ConnState
*@brief:查看设备连接状态
*@param:
*@return: true 连接  false 未连接
***********************************************/
DLL_API bool ConnState();

/***********************************************
*@function:CloseOut
*@brief:关闭输出，在关闭状态下设置输出电压、电流
*@param:[IN] index 当前打开的预设输出组编号 设备默认打开0，范围0-9
        [IN] iset  输出电压设置 mA
        [IN] vset  输出电流设置 mV
*@return: true 正常  false 异常
***********************************************/
DLL_API bool CloseOut(uint8_t index, uint16_t iset, uint16_t vset);

/***********************************************
*@function:DevOpenOrClose
*@brief:连接/断开设备，设备在连接状态调用就是断开，断开下调用就是连接
*@param:
*@return: true 连接  false 断开
***********************************************/
DLL_API bool DevOpenOrClose();

/***********************************************
*@function:GetBasicInfo
*@brief:发送获取基础信息,触发BasicInfoIndication_p指向的回调函数
*@param:
*@return: true 正常  false 异常
***********************************************/
DLL_API bool GetBasicInfo();

/***********************************************
*@function:BasicInfoIndication
*@brief:一个获取当前电压电流的回调函数,被GetBasicInfo()触发
*@param: 参数1: 当前电压  参数2: 当前电流
*@return: 无
***********************************************/
typedef void (BasicInfoIndication_t)(unsigned short, unsigned short);
extern DLL_API BasicInfoIndication_t* BasicInfoIndication_p;

/***********************************************
*@function:GetCurrentBasic
*@brief:获取设备当前的基础信息
*@param:[OUT] index 当前使用的预设输出组 编号 设备默认为 0 取值 0-9
        [OUT] state 输出状态 0 关闭 >0 打开
        [OUT] vset  电压
        [OUT] iset  电流
        [OUT] ovp   过压保护
        [OUT] ocp   过流保护
*@return: true 正常  false 异常
***********************************************/
DLL_API bool GetCurrentBasic(uint8_t* index, uint8_t* state, uint16_t* vset, uint16_t* iset, uint16_t* ovp, uint16_t* ocp);

/***********************************************
*@function:GetDevInfo
*@brief:获取设备信息
*@param:[OUT] devType 设备型号
        [OUT] hdwVer  硬件版本
        [OUT] appVer  设备APP版本
        [OUT] devSN   设备SN
        [OUT] devState设备状态
*@return: true 正常  false 异常
***********************************************/
DLL_API bool GetDevInfo(char* devType, char* hdwVer, char* appVer, char* devSN, char* devState);

/***********************************************
*@function:GetGroupInfo
*@brief:获取预设输出组信息
*@param:[IN] index 组号取值 0 -9   0号编组只能读取， 无法设置 
        [OUT] iset  输出电压设置 mA
        [OUT] vset  输出电流设置 mV
        [OUT] ocp   过流保护参数 mA
        [OUT] ovp   过压保护参数 mV
*@return: true 正常  false 异常
***********************************************/
DLL_API bool GetGroupInfo(uint8_t index, uint16_t* iset, uint16_t* vset, uint16_t* ocp, uint16_t* ovp);

/***********************************************
*@function:GetSysPar
*@brief:获取系统参数
*@param:[OUT] blklev       背光等级 0-4
        [OUT] vollev       音量等级 0-4
        [OUT] opp          过功率保护参数 0-1050，单位0.1W
        [OUT] otp          过热保护参数 50-80 ℃
        [OUT] en_rep       使能反接保护 0 off 1 on
        [OUT] en_auto_out  使能开机自动输出 0 off 1 on
*@return: true 正常  false 异常
***********************************************/
DLL_API bool GetSysPar(uint8_t* blklev, uint8_t* vollev, uint16_t* opp, uint16_t* otp, uint8_t* en_rep, uint8_t* en_auto_out);

/***********************************************
*@function:OpenOut
*@brief:打开输出，在打开状态下设置输出电压、电流
*@param:[IN] index 当前打开的预设输出组编号 设备默认打开0，范围0-9
        [IN] iset  输出电压设置 mA
        [IN] vset  输出电流设置 mV
*@return: true 正常  false 异常
***********************************************/
DLL_API bool OpenOut(uint8_t index, uint16_t iset, uint16_t vset);

/***********************************************
*@function:SetBasicInfo
*@brief:设置对应分组的电压、电流、过流保护、过压保护参数,此函数不会写入到对应输出组,会立即使用此设置
*@param:[IN] index 预设输出组编号 1-9 
        [IN] iset  输出电压设置 mA
        [IN] vset  输出电流设置 mV
        [IN] ocp   过流保护参数 mA
        [IN] ovp   过压保护参数 mV
*@return: true 正常  false 异常
***********************************************/
DLL_API bool SetBasicInfo(uint8_t index, uint16_t iset, uint16_t vset, uint16_t ocp, uint16_t ovp);

/***********************************************
*@function:SetGroupInfo
*@brief:将信息设置到预设输出组 此函数只会让数据写入到设备预设输出组
*@param:[IN] index 预设输出组编号 1-9 
        [IN] iset  输出电压设置 mA
        [IN] vset  输出电流设置 mV
        [IN] ocp   过流保护参数 mA
        [IN] ovp   过压保护参数 mV
*@return: true 正常  false 异常
***********************************************/
DLL_API bool SetGroupInfo(uint8_t index, uint16_t iset, uint16_t vset, uint16_t ocp, uint16_t ovp);

/***********************************************
*@function:SetSysPar
*@brief:设置系统参数
*@param:[IN] appver       app 版本字符串 GetDevInfo 可以获取到 例如“v1.0”    
        [IN] vollev       音量等级 0-4
        [IN] opp          过功率保护参数 0-1050，单位0.1W
        [IN] otp          过热保护参数 50-80 ℃
        [IN] en_rep       使能反接保护 0 off 1 on
        [IN] en_auto_out  使能开机自动输出 0 off 1 on
*@return: true 正常  false 异常
***********************************************/
DLL_API bool SetSysPar(char* appver, uint8_t blklev, uint8_t vollev, uint16_t opp, uint16_t otp, uint8_t en_rep, uint8_t en_auto_out);

/***********************************************
*@function:UseGroup
*@brief:调出预设输出组 让设备切换到这个分组使用
*@param:[IN] index 预设输出组编号 1-9 
*@return: true 正常  false 异常
***********************************************/
DLL_API bool UseGroup(uint8_t index);

#ifdef __cplusplus
    }
#endif